Modern programs are often large and complex. Typically, programs are obtained by assembling various components at runtime. As a result, it is very difficult to understand what external resources a program may depend on. Detecting such dependencies through manual code inspection is impractical and imprecise. In some cases, the source code of a program may not even be available. Therefore, manual code inspection may not even be an option. At the same time, server virtualization or migration; application consolidation; security, reliability, and isolation assessment; smart backup and recovery planning; and a number of other management tasks require the knowledge of external and cross-program dependencies.